﻿/// @author: Bruno Figueira 11234
/// @author: Luis Pereira 12784
/// @last updated: 26-01-2015

using srccsharp.model;
using System;
using System.Collections.Generic;
using System.Data.Linq;
using System.Data.SQLite;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Excel = Microsoft.Office.Interop.Excel;

namespace srccsharp.controller
{
    /// <summary>
    /// Dado o ficheiro Excel pretendido,
    /// lê os seus valores linha a linha
    /// </summary>
    class ReadExcel
    {
        private string filename;

        /// <summary>
        /// Construtor da classe ReadExcel
        /// </summary>
        /// <param name="filename"></param>
        public ReadExcel(string filename)
        {
            this.filename = filename;
        }

        /// <summary>
        /// Abre uma nova aplicação Excel, define o caminho
        /// onde se encontra o ficheiro Excel e lê individualmente
        /// cada linha da primeira folha
        /// </summary>
        /// <param name="dbmanager">Objeto da classe DBManager</param>
        /// <returns>Retorna "True" se o processo tiver 
        /// corrido com sucesso</returns>
        public Boolean LoadToDB(DBManager dbmanager)
        {
            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            Excel.Range range;

            int rCnt = 0;

            xlApp = new Excel.Application();

            string path = Directory.GetCurrentDirectory();

            var filelocation = Path.Combine(path, this.filename);


            //Abrir ficheiro Excel
            xlWorkBook = xlApp.Workbooks.Open(filelocation, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

            //Carregar o conteúdo do ficheiro
            range = xlWorkSheet.UsedRange;

            IPC ipc;

            //Iterar linhas do ficheiro
            for (rCnt = 2; rCnt <= 38; rCnt++)
            {
                ipc = new IPC();
                ipc.ano = System.Convert.ToInt32((range.Cells[rCnt, 2] as Excel.Range).Value2);
                ipc.ipc_global = System.Convert.ToSingle((range.Cells[rCnt, 3] as Excel.Range).Value2);
                ipc.taxa_de_inflacao = System.Convert.ToSingle((range.Cells[rCnt, 4] as Excel.Range).Value2);
                ipc.remun_min_mensal = System.Convert.ToSingle((range.Cells[rCnt, 5] as Excel.Range).Value2);
                ipc.remun_max_mensal = System.Convert.ToSingle((range.Cells[rCnt, 6] as Excel.Range).Value2);
                ipc.pib_anual = System.Convert.ToSingle((range.Cells[rCnt, 7] as Excel.Range).Value2);
                ipc.rendimento_nacional_bruto_anual = System.Convert.ToSingle((range.Cells[rCnt, 8] as Excel.Range).Value2);
                ipc.rendimento_disponivel_bruto_anual = System.Convert.ToSingle((range.Cells[rCnt, 9] as Excel.Range).Value2);
                ipc.remuneracoes_anual = System.Convert.ToSingle((range.Cells[rCnt, 10] as Excel.Range).Value2);
                //Adicionar registo à tabela
                dbmanager.InsertIPC(ipc);
            }

            xlWorkBook.Close(false, null, null);
            xlApp.Quit();

            return true;
        }
    }

        
           
}
